// 分解质因数 唯一分解定理 试除法
// 测试链接 ：https://www.luogu.com.cn/problem/P2043
// 相关帖子 ：https://www.cnblogs.com/dx123/p/16687746.html
// 相关帖子 ：https://oi-wiki.org/math/number-theory/pollard-rho/
// 提交以下的code，可以直接通过

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 10001;
int cnt[MAXN];

// 质因数分解
void decompose(int x)
{
    for(int i = 2; i <= x / i; ++i)
    {
        // i 是质数，将 i 这个质因子除尽
        while(x % i == 0)
        {
            ++cnt[i];
            x /= i;
        }
    }
    // 还剩下一个质因子
    if(x > 1) ++cnt[x];
}

int main()
{
    int n;
    scanf("%d", &n);
    // 对 n! 进行质因子分解
    for(int i = 2; i <= n; ++i) decompose(i);
    for(int i = 2; i <= n; ++i)
    {
        // i -> 质因子
        // cnt[i] -> 质因子的个数
        if(cnt[i]) printf("%d %d\n", i, cnt[i]);
    }
}